package com.sky.mapper;

import com.github.pagehelper.Page;
import com.sky.entity.Orders;
import com.sky.vo.BusinessDataVO;
import com.sky.vo.OrderStatisticsVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * OrdersMapper
 *
 * @author liliudong
 * @version 1.0
 * @description
 * @date 2023/8/4 10:10
 */
@Mapper
public interface OrdersMapper {
    /**
     * 插入订单信息
     *
     * @param orders 订单
     */
    void insert(Orders orders);

    /**
     * 更新数量
     *
     * @param orders 订单
     */
    void updateByNumber(Orders orders);

    /**
     * 选择页面
     *
     * @param orders 订单
     * @return {@link Page}<{@link Orders}>
     */
    Page<Orders> selectPage(Orders orders);

    /**
     * 选择一个通过id
     *
     * @param id id
     * @return {@link Orders}
     */
    Orders selectById(Long id);

    /**
     * 更新通过id
     *
     * @param orders 订单
     */
    void updateById(Orders orders);

    /**
     * 选择统计
     *
     * @return {@link List}<{@link Map}<{@link Integer}, {@link Integer}>>
     */
    OrderStatisticsVO selectStatistics();

    /**
     * 更新状态,状态之前订单时间
     *
     * @param statusResult 状态结果
     * @param statusQuery  状态查询
     * @param orderTime    订单时间
     * @return {@link List}<{@link Orders}>
     */
    Integer updateStatusByStatusBeforeOrderTime(Integer statusResult, Integer statusQuery, LocalDateTime orderTime);

    /**
     * 更新状态状态
     *
     * @param statusResult 状态结果
     * @param statusQuery  状态查询
     * @return {@link Integer}
     */
    Integer updateStatusByStatus(Integer statusResult, Integer statusQuery);

    /**
     * 选择数量
     *
     * @param number 数量
     * @return {@link Orders}
     */
    @Select("select * from orders where number = #{number}")
    Orders selectByNumber(String number);

    /**
     * 选择营业额统计
     *
     * @param begin 开始
     * @param end   结束
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    List<Map<String, Object>> selectTurnoverStatistics(LocalDate begin, LocalDate end);

    /**
     * 选择顺序数列表
     *
     * @param begin 开始
     * @param end   结束
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    List<Map<String, Object>> selectOrderCountList(LocalDate begin, LocalDate end);

    /**
     * 选择数量与日期
     *
     * @param date 日期
     * @return {@link Integer}
     */
    Integer selectCountWithDate(String date);

    /**
     * 选择订单总数
     *
     * @param begin 开始
     * @param end   结束
     * @return {@link Integer}
     */
    Integer selectTotalOrderCount(LocalDate begin, LocalDate end);

    /**
     * 选择全球
     *
     * @param begin 开始
     * @param end   结束
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    List<Map<String, Object>> selectTop10(LocalDate begin, LocalDate end);

    /**
     * 选择业务数据签证官
     *
     * @param begin 开始
     * @param end   结束
     * @return {@link BusinessDataVO}
     */
    BusinessDataVO selectBusinessDataVO(LocalDate begin, LocalDate end);

    /**
     * 选择业务数据vowith一天
     *
     * @param begin 开始
     * @param end   结束
     * @return {@link List}<{@link BusinessDataVO}>
     */
    List<BusinessDataVO> selectBusinessDataVOWithDay(LocalDate begin, LocalDate end);
}
